# 编译器
CXX := g++

# 编译选项
CXXFLAGS := -Wall -Wextra -pedantic -O2 -std=c++17 -Iinclude

# 源文件目录
SRC_DIR := src

# 编译目录
BUILD_DIR := build

# 目标可执行文件
TARGET := $(BUILD_DIR)/common_learn

# 定义源文件和对象文件
SRCS := $(wildcard $(SRC_DIR)/*.cpp)
OBJS := $(patsubst $(SRC_DIR)/%.cpp,$(BUILD_DIR)/%.o,$(SRCS))

# 默认目标
all: $(TARGET)

# 链接可执行文件
$(TARGET): $(OBJS) | $(BUILD_DIR)
	$(CXX) $(OBJS) -o $@

# 编译源文件到对象文件
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.cpp | $(BUILD_DIR)
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 创建构建目录
$(BUILD_DIR):
	mkdir -p $@

# 清理
clean:
	rm -rf $(BUILD_DIR)

.PHONY: all clean